﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SanFranciscoModel.Intermedias;

namespace SanFranciscoModel.Familiar
{
    public class FamiliarManager
    {

        //Metodo para devolver una lista de TipoAlumno cargada
        public List<TipoFamiliar> getTipoFamiliarAll()
        {
            List<TipoFamiliar> TipoFamiliarList = new List<TipoFamiliar>();
            TipoFamiliarDataContext db = new TipoFamiliarDataContext();

            var objeto = from tipoalumno in db.TipoFamiliars
                         select tipoalumno;
            foreach (var tipo in objeto)
            {
                TipoFamiliarList.Add(tipo);
            }
            return TipoFamiliarList;
        }

        public void guardarFamiliar(Familiar familiar)
        {
            FamiliarDataContext db = new FamiliarDataContext();

            try
            {
                db.Familiars.InsertOnSubmit(familiar);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        public void guardarFamiliarXAlumno(FamiliarXAlumno FamiliarXAlumno)
        {
            FamiliarXAlumnoDataContext db = new FamiliarXAlumnoDataContext();

            try
            {
                db.FamiliarXAlumnos.InsertOnSubmit(FamiliarXAlumno);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        

        public void modificarFamiliar(Familiar familiar)
        {
            FamiliarDataContext db = new FamiliarDataContext();

            var objeto = from fami in db.Familiars
                         where familiar.DNIFamiliar == familiar.DNIFamiliar
                         select fami;

            foreach (var fam in objeto)
            {
                if (fam.DNIFamiliar == familiar.DNIFamiliar)
                {
                    fam.Nombre = familiar.Nombre;
                    fam.Apellido = familiar.Apellido;
                    fam.Direccion = familiar.Direccion;
                    fam.FechaNacimiento = familiar.FechaNacimiento;
                    fam.Nacionalidad = familiar.Nacionalidad;
                    fam.Sexo = familiar.Sexo;
                    fam.Telefono = familiar.Telefono;
                    fam.Ocupacion = familiar.Ocupacion;
                    fam.TipoFamiliar = familiar.TipoFamiliar;

                }
            }

            try
            {
                db.SubmitChanges();
            }
            catch
            {
            }
        }

        public Familiar getFamiliarbyDNI(int DNI)
        {
            Familiar Familiar = new Familiar();
            FamiliarDataContext db = new FamiliarDataContext();

            var objeto = from familiar in db.Familiars
                         where familiar.DNIFamiliar == DNI
                         && familiar.Activo==true
                         select familiar;

            foreach (var fami in objeto)
            {
                Familiar = fami;
            }

            return Familiar;
        }

        public bool ExisteFamiliarSimple(int DNI)
        {
            Familiar Familiar = new Familiar();
            FamiliarDataContext db = new FamiliarDataContext();

            var objeto = from familiar in db.Familiars
                         where familiar.DNIFamiliar == DNI
                         && familiar.Activo == true
                         select familiar;

            foreach (var fami in objeto)
            {
                Familiar = fami;
            }

            if (Familiar.DNIFamiliar == DNI)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool ExisteFamiliar(int DNI, int DNIAlumno)
        {
            FamiliarXAlumno FamiliarXAlumno = new FamiliarXAlumno();
            FamiliarXAlumnoDataContext db = new FamiliarXAlumnoDataContext();

            var objeto = from familiar in db.FamiliarXAlumnos
                         where familiar.DNIFamiliar == DNI
                         && familiar.DNIAlumno==DNIAlumno
                         select familiar;

            foreach (var fami in objeto)
            {
                FamiliarXAlumno = fami;
            }

            if (FamiliarXAlumno.DNIFamiliar == DNI && FamiliarXAlumno.DNIAlumno == DNIAlumno)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool EliminarFamiliar(int dni)
        {
            Familiar Familiar = new Familiar();
            FamiliarDataContext db = new FamiliarDataContext();

            var objeto = from familiar in db.Familiars
                         where familiar.DNIFamiliar == dni
                         select familiar;

            foreach (var fami in objeto)
            {
                fami.Activo = false;//Le doy la baja logica
            }

            try
            {
                db.SubmitChanges();
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool EliminarFamiliarXAlumno(int dniFamiliar)
        {
            FamiliarXAlumno FamiliarXAlumno = new FamiliarXAlumno();
            FamiliarXAlumnoDataContext db = new FamiliarXAlumnoDataContext();
            List<FamiliarXAlumno> FamiliarXAlumnoList = new List<Intermedias.FamiliarXAlumno>();

            var objeto = from familiar in db.FamiliarXAlumnos
                         select familiar;

            foreach (var fami in objeto)
            {
                FamiliarXAlumnoList.Add(fami);
            }

            try
            {
               db.FamiliarXAlumnos.DeleteAllOnSubmit(db.FamiliarXAlumnos.Where(familiar => familiar.DNIFamiliar == dniFamiliar));
               db.SubmitChanges();
                
                return true;
            }
            catch 
            {
                return false;
            }
        }
    }
}
